﻿using Cherry.Agile.Enterprise.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Cherry.Agile.Enterprise.Services.Interface
{
    /// <summary>
    /// 组织对外的接口
    /// </summary>
    [ServiceContract(Namespace = Unity.Namespace)]
    public interface IOpenOrganizationService
    {
        /// <summary>
        /// 获取某组织下面的所有子组织，以便生成子组织树
        /// </summary>
        /// <param name="orgID">组织ID</param>
        /// <param name="includeSelf">是否包含传入的组织</param>
        /// <returns>组织列表</returns>
        [OperationContract]
        List<OrganizationInfo> GetAllChildOrganization(int orgID, bool includeSelf);

        /// <summary>
        /// 获取单位下的所有单位信息，不包括部门
        /// </summary>
        /// <param name="unitOrgID">组织ID</param>
        /// <param name="includeSelf">是否包含传入的单位组织ID</param>
        /// <returns>单位列表</returns>
        [OperationContract]
        List<OrganizationInfo> GetAllChildUnit(int unitOrgID, bool includeSelf);

        /// <summary>
        /// 根据组织ID，获取组织实体
        /// </summary>
        /// <param name="orgID">组织ID</param>
        /// <returns>组织实体</returns>
        [OperationContract]
        OrganizationInfo GetOrganizationInfoByID(int orgID);

        /// <summary>
        /// 获取所有的上级组织（包括传入的组织）
        /// </summary>
        /// <param name="orgID">传入的组织</param>
        /// <returns>组织ID列表</returns>
        [OperationContract]
        List<int> GetAllParentOrganization(int orgID);

        /// <summary>
        /// 根据会员ID获取他所在的所属的组织列表（包括上级的组织和部门）
        /// </summary>
        /// <param name="patientID">会员ID</param>
        /// <returns>会员所在的所属的组织列表</returns>
        [OperationContract]
        List<int> GetOrganizationByCustID(int patientID);

        /// <summary>
        /// 获取用户当前监护部门或监护单位.
        /// 存在监护部门是返回监护部门，不存在则返回监护单位. 病人未开通服务返回null
        /// </summary>
        /// <param name="patientId">会员ID</param>
        /// <returns>组织ID列表，病人未开通服务返回NULL</returns>
        [OperationContract]
        List<int> GetCustMonitoringOrg(int custId);


    }
}
